﻿#ifndef GGBONDBTNPROGRESSBAR_H
#define GGBONDBTNPROGRESSBAR_H

/**
 * 使用方法：因为总范围是0-360，所以需要按照360的比例来算
 * 1:可设置进度线条宽度+颜色
 * 2:可设置边框宽度+颜色
 * 3:可设置圆角角度+背景颜色
 * 4:可设置开始状态和结束状态的文本，默认为开始和结束
 * 5:可设置最大范围，计算出步长double step = 360 / valueMax valueMax默认为360
 * 6:进度改变会发出 valueChanged(double value) 信号
 */

#include <QWidget>
#include <QTimer>

class GGbondBtnProgressBar : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(int lineWidth READ getLineWidth WRITE setLineWidth)
    Q_PROPERTY(QColor lineColor READ getLineColor WRITE setLineColor)
    Q_PROPERTY(int borderWidth READ getBorderWidth WRITE setBorderWidth)
    Q_PROPERTY(QColor borderColor READ getBorderColor WRITE setBorderColor)
    Q_PROPERTY(int borderRadius READ getBorderRadius WRITE setBorderRadius)
    Q_PROPERTY(QColor bgColor READ getBgColor WRITE setBgColor)
    Q_PROPERTY(QString startText READ getStartText WRITE setStartText)
    Q_PROPERTY(QString stopText READ getStopText WRITE setStopText)
    Q_PROPERTY(double valueMax READ getValueMax WRITE setValueMax)

    enum Status_Type{
        Status_Start = 0,
        Status_Ing,
        Status_Stop
    };

public:
    explicit GGbondBtnProgressBar(QWidget *parent = nullptr);
    ~GGbondBtnProgressBar();

protected:
    void resizeEvent(QResizeEvent *);
    void mousePressEvent(QMouseEvent *);
    void paintEvent(QPaintEvent *);
    void drawBg(QPainter *painter);
    void drawProgress(QPainter *painter);

private:
    int lineWidth;          //线条宽度
    QColor lineColor;       //线条颜色
    int borderWidth;        //边框宽度
    QColor borderColor;     //边框颜色
    int borderRadius;       //圆角角度
    QColor bgColor;         //背景颜色

    double value;           //当前值
    int status;             //状态
    int tempWidth;          //动态改变宽度
    QTimer *timer;          //定时器改变进度

    QString startText;      //按钮初始文字
    QString stopText;       //按钮结束文字

    double valueMax;        //最大范围值，计算步长

public:
    int getLineWidth()      const;
    QColor getLineColor()   const;
    int getBorderWidth()    const;
    QColor getBorderColor() const;
    int getBorderRadius()   const;
    QColor getBgColor()     const;
    QString getStartText()  const;
    QString getStopText()   const;
    double getValueMax()    const;

    QSize sizeHint()        const;
    QSize minimumSizeHint() const;

private slots:
    void progress();

public Q_SLOTS:
    //设置线条宽度+颜色
    void setLineWidth(int lineWidth);
    void setLineColor(const QColor &lineColor);

    //设置边框宽度+颜色
    void setBorderWidth(int borderWidth);
    void setBorderColor(const QColor &borderColor);

    //设置圆角角度+背景颜色
    void setBorderRadius(int borderRadius);
    void setBgColor(const QColor &bgColor);

    //设置开始文本和结束文本
    void setStartText(const QString &startText);
    void setStopText(const QString &stopText);

    //设置最大范围，计算步长
    void setValueMax(const double &valueMax);

Q_SIGNALS:
    void valueChanged(double value);
};

#endif // GGBONDBTNPROGRESSBAR_H
